//    rcmd(Romanius),       zcmd(Zeex)
//: frog163
//Skype: frog14.05

//native OnPlayerUseRusCommand(playerid, rus_cmd[], params[]);
//native fcmd(playerid, params[]);
#include a_samp
#if defined fcmd_inc
  #endinput
#endif
#define fcmd_inc

//#define rus_cmd_use//    

public OnPlayerCommandText(playerid, cmdtext[]){
	if(cmdtext[0] != '/')return true;
	#if defined rus_cmd_use
	if(0xbf < cmdtext[1] < 0x100 || cmdtext[1] == 0xb8 || cmdtext[1] == 0xa8){//   
		new command[14] = '/', f = 1;
		for(; cmdtext[f] > 0x20; f++)command[f] = cmdtext[f];
		if(funcidx("fcmd_OnPlayerCommandText") > 0){
			if(!OnPlayerUseRusCommand(playerid, command, cmdtext[f]))return CallLocalFunction("fcmd_OnPlayerCommandText", "is", playerid, cmdtext);
			CallLocalFunction("fcmd_OnPlayerCommandText", "is", playerid, cmdtext);
			return true;
		}
		return OnPlayerUseRusCommand(playerid, command, cmdtext[f]);
	}
	#endif
	if(funcidx("fcmd_OnPlayerCommandText") > 0){
		if(!fcmd(playerid, cmdtext))return CallLocalFunction("fcmd_OnPlayerCommandText", "is", playerid, cmdtext);
		CallLocalFunction("fcmd_OnPlayerCommandText", "is", playerid, cmdtext);
		return true;
	}
	return fcmd(playerid, cmdtext);
}

fcmd(playerid, fcmd_str[]){
	new f = 1, command[14 char];
	command{0} = '_';
	for( ; fcmd_str[f] > 0x20; f++) command{f} = tolower(fcmd_str[f]);
	if(funcidx(command) > 0){
		if(fcmd_str[f+1])CallLocalFunction(command, "is", playerid, fcmd_str[f+1]);
		else CallLocalFunction(command, "is", playerid, "\1");
		return true;
	}
	return false;
}

#define cmd::%0(%1,%2)						forward _%0(%1,%2);public _%0(%1,%2)
#define noparams							params[0] == 1
#define duplicate_cmd(%0,%1);				if(!strcmp(rus_cmd, %0, true)){strins(params, %1, 0, 64);return fcmd(playerid, params);}
#define	OnPlayerUseRusCommand()				OnPlayerUseRusCommand(playerid, rus_cmd[], params[])

forward fcmd_OnPlayerCommandText(playerid, cmdtext[]);
#define OnPlayerCommandText fcmd_OnPlayerCommandText